#pragma once

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <unordered_map>

namespace ns_user
{
    // 用户结构体
    struct User
    {
        std::string username;
        std::string password;
        // 其他用户信息...
    };

    // 用户服务类
    class UserService
    {
    public:
        UserService() {}
        ~UserService() {}

        // 用户注册
        bool Register(const std::string& username, const std::string& password)
        {
            // 检查用户名是否已存在
            if (IsUserExist(username))
            {
                return false; // 用户名已存在，注册失败
            }

            // 创建新用户
            User newUser;
            newUser.username = username;
            newUser.password = password;

            // 将新用户保存到文件
            SaveUser(newUser);

            return true; // 注册成功
        }

        // 用户登录
        bool Login(const std::string& username, const std::string& password)
        {
            // 查找用户
            User user = GetUser(username);

            // 验证密码
            if (user.password == password)
            {
                return true; // 登录成功
            }

            return false; // 登录失败
        }

        // 检查用户名是否存在
        bool IsUserExist(const std::string& username)
        {
            // 从文件中读取所有用户
            std::vector<User> users = LoadUsers();

            // 检查用户名是否存在
            for (const auto& user : users)
            {
                if (user.username == username)
                {
                    return true; // 用户名已存在
                }
            }

            return false; // 用户名不存在
        }

    private:
        // 保存用户到文件
        void SaveUser(const User& user)
        {
            std::ofstream file("users.txt", std::ios::app);
            if (file.is_open())
            {
                file << user.username << "," << user.password << std::endl;
                file.close();
            }
        }

        // 从文件中读取用户
        User GetUser(const std::string& username)
        {
            std::ifstream file("users.txt");
            if (file.is_open())
            {
                std::string line;
                while (std::getline(file, line))
                {
                    std::size_t pos = line.find(',');
                    if (pos != std::string::npos)
                    {
                        std::string file_username = line.substr(0, pos);
                        std::string file_password = line.substr(pos + 1);
                        if (file_username == username)
                        {
                            User user;
                            user.username = file_username;
                            user.password = file_password;
                            return user;
                        }
                    }
                }
                file.close();
            }
            User user;
            user.username = "";
            user.password = "";
            return user;
        }

        // 从文件中加载所有用户
        std::vector<User> LoadUsers()
        {
            std::vector<User> users;
            std::ifstream file("users.txt");
            if (file.is_open())
            {
                std::string line;
                while (std::getline(file, line))
                {
                    std::size_t pos = line.find(',');
                    if (pos != std::string::npos)
                    {
                        std::string username = line.substr(0, pos);
                        std::string password = line.substr(pos + 1);
                        User user;
                        user.username = username;
                        user.password = password;
                        users.push_back(user);
                    }
                }
                file.close();
            }
            return users;
        }
    };
} // namespace ns_user
